package br.com.foxinline.manager.criar;

import br.com.foxinline.enums.CategoriaPessoa;
import br.com.foxinline.enums.PontosCardeais;
import br.com.foxinline.enums.TipoCoordenada;
import br.com.foxinline.enums.TipoPessoa;
import br.com.foxinline.modelo.*;
import br.com.foxinline.servico.BairroServico;
import br.com.foxinline.servico.CartorioServico;
import br.com.foxinline.servico.CidadeServico;
import br.com.foxinline.servico.ImovelServico;
import br.com.foxinline.servico.LivroServico;
import br.com.foxinline.servico.ObjetoServico;
import br.com.foxinline.servico.OrigemServico;
import br.com.foxinline.servico.PessoaServico;
import br.com.foxinline.servico.ProtocoloServico;
import br.com.foxinline.servico.RegistroServico;
import br.com.foxinline.servico.TituloServico;
import br.com.foxinline.servico.TransferenciaServico;
import br.com.foxinline.utilitario.AnexoUtilitario;
import br.com.foxinline.utilitario.Caracteres;
import br.com.foxinline.utilitario.Conexao;
import br.com.foxinline.utilitario.CoordinateConversion;
import br.com.foxinline.utilitario.Mensagem;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.ejb.EJBException;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import org.primefaces.context.RequestContext;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.event.map.StateChangeEvent;
import org.primefaces.model.map.*;

/**
 *
 * @author cadomeireles
 */
@ViewScoped
@ManagedBean
public class ManagerCriarImovel implements Serializable {

    @EJB
    ImovelServico imovelServico;
    @EJB
    ObjetoServico objetoServico;
    @EJB
    OrigemServico origemServico;
    @EJB
    TransferenciaServico transferenciaServico;
    @EJB
    RegistroServico registroServico;
    @EJB
    LivroServico livroServico;
    @EJB
    TituloServico tituloServico;
    @EJB
    CidadeServico cidadeServico;
    @EJB
    PessoaServico pessoaServico;
    @EJB
    BairroServico bairroServico;
    @EJB
    CartorioServico cartorioServico;
    @EJB
    ProtocoloServico protocoloServico;
    private Imovel imovel;
    private Transferencia transferencia;
    private Registro registro;
    private Objeto objeto;
    private Protocolo protocoloPesquisar;
    private Protocolo protocoloSelecionado;
    private List<Protocolo> protocolos;
    private RegistroAnterior registroAnterior;
    private List<RegistroAnterior> registrosAnterioresNaoCadastrados;
    private Imovel imovelAnteriorPesquisar;
    private Imovel imovelAnteriorSelecionado;
    private List<Imovel> imoveisAnteriores;
    private List<Imovel> imoveisAnterioresSelecionados;
    private Pessoa adquirentePesquisar;
    private Pessoa adquirenteSelecionado;
    private Pessoa adquirenteDeletar;
    private List<Pessoa> adquirentes;
    private Pessoa adquirenteCadastrar;
    private List<Pessoa> adquirentesSelecionados;
    private Pessoa transmitentePesquisar;
    private Pessoa transmitenteSelecionado;
    private Pessoa transmitenteDeletar;
    private List<Pessoa> transmitentes;
    private Pessoa transmitenteCadastrar;
    private List<Pessoa> transmitentesSelecionados;
    private List<Anexo> anexos;
    private Georreferenciamento ponto;
    private List<Georreferenciamento> coordenadas;
    private MapModel mapa;
    private String centroMapa;
    private AnexoUtilitario arquivoUtilitario;
    private String editarId;
    private boolean conexao;

    @PostConstruct
    public void init() {
        instanciar();
        delegar();
    }

    private void instanciar() {
        this.conexao = Conexao.verificar();

        this.imovel = new Imovel();

        this.transferencia = new Transferencia();
        this.registro = new Registro();

        this.objeto = new Objeto();
        this.objeto.setZoom(17);
        this.objeto.setEndereco(new Endereco());

        instanciarProtocolo();

        instenciarRegistroAnteriorNaoCadastro();

        instanciarImovelAnterior();
        this.imoveisAnterioresSelecionados = new ArrayList<Imovel>();

        instanciarAdquirentePesquisar();
        this.adquirenteDeletar = new Pessoa();
        this.adquirentesSelecionados = new ArrayList<Pessoa>();

        instanciarAdquirenteCadastrar();

        instanciarTransmitentePesquisar();
        this.transmitenteDeletar = new Pessoa();
        this.transmitentesSelecionados = new ArrayList<Pessoa>();

        instanciarTransmitenteCadastrar();

        this.anexos = new ArrayList<Anexo>();

        this.ponto = new Georreferenciamento();
        this.coordenadas = new ArrayList<Georreferenciamento>();
        this.mapa = new DefaultMapModel();
        this.centroMapa = "-2.9136, -41.7577";

        this.arquivoUtilitario = new AnexoUtilitario();
    }

    public void instanciarProtocolo() {
        this.protocoloPesquisar = new Protocolo();
        this.protocoloPesquisar.setDataCadastro(null);
        this.protocoloPesquisar.setCliente(new Pessoa());
        this.protocoloSelecionado = new Protocolo();
        this.protocolos = new ArrayList<Protocolo>();
    }

    public void instenciarRegistroAnteriorNaoCadastro() {
        this.registroAnterior = new RegistroAnterior();
        this.registrosAnterioresNaoCadastrados = new ArrayList<RegistroAnterior>();
    }

    public void instanciarAdquirenteCadastrar() {
        this.adquirenteCadastrar = new Pessoa();
        this.adquirenteCadastrar.setTipoPessoa(TipoPessoa.FISICA);
        this.adquirenteCadastrar.setEndereco(new Endereco());
    }

    public void instanciarAdquirentePesquisar() {
        this.adquirentePesquisar = new Pessoa();
        this.adquirentePesquisar.setTipoPessoa(TipoPessoa.FISICA);

        this.adquirenteSelecionado = new Pessoa();

        this.adquirentes = new ArrayList<Pessoa>();
    }

    public void instanciarTransmitenteCadastrar() {
        this.transmitenteCadastrar = new Pessoa();
        this.transmitenteCadastrar.setTipoPessoa(TipoPessoa.FISICA);
        this.transmitenteCadastrar.setEndereco(new Endereco());
    }

    public void instanciarTransmitentePesquisar() {
        this.transmitentePesquisar = new Pessoa();
        this.transmitentePesquisar.setTipoPessoa(TipoPessoa.FISICA);

        this.transmitenteSelecionado = new Pessoa();

        this.transmitentes = new ArrayList<Pessoa>();
    }

    public void instanciarImovelAnterior() {
        this.imovelAnteriorPesquisar = new Imovel();
        this.imovelAnteriorSelecionado = new Imovel();
        this.imoveisAnteriores = new ArrayList<Imovel>();
    }

    private void delegar() {
        Map<String, String> parametros = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
        this.editarId = parametros.get("imovelId");

        if (this.editarId != null) {
            this.imovel = imovelServico.pesquisar(Long.parseLong(this.editarId));

            this.objeto = objetoServico.pesquisar(this.imovel);

            this.registro = imovelServico.obterPrimeiroRegistro(this.imovel);

            this.transferencia = imovelServico.transferenciaAtual(imovel);

            this.adquirentesSelecionados = transferenciaServico.pesquisarAdquirentes(this.transferencia);
            this.transmitentesSelecionados = transferenciaServico.pesquisarTransmitentes(this.transferencia);

            this.registrosAnterioresNaoCadastrados = imovelServico.pesquisarRegistrosNaoCadastrados(this.imovel);

            this.imoveisAnterioresSelecionados = imovelServico.pesquisarImoveisAnteriores(this.imovel);

            this.coordenadas = imovelServico.coordenadas(this.imovel);

            if (!this.coordenadas.isEmpty() && this.conexao) {
                plotar();
            }

            this.anexos = imovelServico.pesquisarAnexos(this.imovel);
        }
    }

    public void pesquisarProtocolo() {
        this.protocolos = protocoloServico.pesquisar(this.protocoloPesquisar);
    }

    public void selecionarProtocolo() {

        if (this.protocoloSelecionado.getId() != null) {
            this.imovel.setProtocolo(this.protocoloSelecionado);

            instanciarProtocolo();

            RequestContext requestContext = RequestContext.getCurrentInstance();
            requestContext.execute("dialogProtocolo.hide()");
        }

    }

    public void pesquisarAdquirente() {
        this.adquirentes = pessoaServico.pesquisarCliente(this.adquirentePesquisar, this.adquirentesSelecionados, this.transmitentesSelecionados);
    }

    public void selecionarAdquirente() {

        if (this.adquirenteSelecionado.getId() != null) {
            this.adquirentesSelecionados.add(this.adquirenteSelecionado);
            instanciarAdquirentePesquisar();

            RequestContext requestContext = RequestContext.getCurrentInstance();
            requestContext.execute("dialogAdquirente.hide()");
        }

    }

    public void limparAdquirente() {
        this.adquirentePesquisar.setNome(null);
        this.adquirentePesquisar.setCpf(null);
        this.adquirentePesquisar.setCnpj(null);
        this.adquirentes = new ArrayList<Pessoa>();
    }

    public void removerAdquirente() {
        this.adquirentesSelecionados.remove(this.adquirenteDeletar);
    }

    public void pesquisarTransmitente() {
        this.transmitentes = pessoaServico.pesquisarCliente(this.transmitentePesquisar, this.adquirentesSelecionados, this.transmitentesSelecionados);
    }

    public void selecionarTransmitente() {

        if (this.transmitenteSelecionado.getId() != null) {
            this.transmitentesSelecionados.add(this.transmitenteSelecionado);
            instanciarTransmitentePesquisar();

            RequestContext requestContext = RequestContext.getCurrentInstance();
            requestContext.execute("dialogTransmitente.hide()");
        }

    }

    public void pesquisarImovelAnterior() {
        this.imoveisAnteriores = imovelServico.pesquisar(this.imovelAnteriorPesquisar);
    }

    public void selecionarImovelAnterior() {
        this.imoveisAnterioresSelecionados.add(this.imovelAnteriorSelecionado);

        instanciarImovelAnterior();
    }

    public void removerImovelAnterior(Imovel imovel) {
        this.imoveisAnterioresSelecionados.remove(imovel);
    }

    public void limparTransmitente() {
        this.transmitentePesquisar.setNome(null);
        this.transmitentePesquisar.setCpf(null);
        this.transmitentePesquisar.setCnpj(null);
        this.transmitentes = new ArrayList<Pessoa>();
    }

    public void removerTransmitente() {
        this.transmitentesSelecionados.remove(this.transmitenteDeletar);
    }

    public void adicionarAnexo(FileUploadEvent event) {

        try {
            this.anexos.add(arquivoUtilitario.adicionarArquivo(event));
        } catch (FileNotFoundException e) {
            Logger.getLogger(ManagerCriarImovel.class.getName()).log(Level.SEVERE, null, e);
        } catch (SQLException e) {
            Logger.getLogger(ManagerCriarImovel.class.getName()).log(Level.SEVERE, null, e);
        } catch (IOException e) {
            Logger.getLogger(ManagerCriarImovel.class.getName()).log(Level.SEVERE, null, e);
        }

    }

    public void removerAnexo(Anexo a) {
        try {
            arquivoUtilitario.excluirArquivo(new File(a.getUrl() + a.getNome()));
            this.anexos.remove(a);
        } catch (FileNotFoundException ex) {
            Logger.getLogger(ManagerCriarImovel.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void salvarAdquirente() {
        this.adquirenteCadastrar.setCategoriaPessoa(CategoriaPessoa.CLIENTE);

        if (this.adquirenteCadastrar.getTipoPessoa() == TipoPessoa.FISICA) {
            this.adquirenteCadastrar.setCpf(Caracteres.removecaracter(this.adquirenteCadastrar.getCpf()));
        } else {
            this.adquirenteCadastrar.setCnpj(Caracteres.removecaracter(this.adquirenteCadastrar.getCnpj()));
        }

        this.adquirenteCadastrar.getEndereco().setCep(Caracteres.removecaracter(this.adquirenteCadastrar.getEndereco().getCep()));

        pessoaServico.salvar(this.adquirenteCadastrar);

        this.adquirentesSelecionados.add(this.adquirenteCadastrar);

        instanciarAdquirenteCadastrar();

        RequestContext requestContext = RequestContext.getCurrentInstance();
        requestContext.execute("dialogAdquirente.hide()");
    }

    public void salvarTransmitente() {
        this.transmitenteCadastrar.setCategoriaPessoa(CategoriaPessoa.CLIENTE);

        if (this.transmitenteCadastrar.getTipoPessoa() == TipoPessoa.FISICA) {
            this.transmitenteCadastrar.setCpf(Caracteres.removecaracter(this.transmitenteCadastrar.getCpf()));
        } else {
            this.transmitenteCadastrar.setCnpj(Caracteres.removecaracter(this.transmitenteCadastrar.getCnpj()));
        }

        this.transmitenteCadastrar.getEndereco().setCep(Caracteres.removecaracter(this.transmitenteCadastrar.getEndereco().getCep()));

        pessoaServico.salvar(this.transmitenteCadastrar);

        this.transmitentesSelecionados.add(this.transmitenteCadastrar);

        instanciarTransmitenteCadastrar();

        RequestContext requestContext = RequestContext.getCurrentInstance();
        requestContext.execute("dialogTransmitente.hide()");
    }

    public void adicionarCoordenada() {

        if (this.ponto.getTipoCoordenada() == TipoCoordenada.LATITUDE_LOGITUDE) {

            CoordinateConversion cc = new CoordinateConversion();

            String N = this.ponto.getConvN().replace(" ", "").replace(".", "");
            String E = this.ponto.getConvE().replace(" ", "").replace(".", "");

            String UTM = E.substring(0, 2) + " " + this.ponto.getConvZona() + " " + E.substring(2) + " " + N;
            double[] dd = cc.utm2LatLon(UTM);

            this.ponto.setLatitude(dd[0]);
            this.ponto.setLongitude(dd[1]);

        } else {

            Double latitude = this.ponto.getMinutoLatitude() / 60 + this.ponto.getSegundoLatitude() / 3600;

            if (this.ponto.getGrauLatitude() < 0) {
                latitude = this.ponto.getGrauLatitude() - latitude;
            } else {
                latitude = this.ponto.getGrauLatitude() + latitude;
            }

            if (this.ponto.getPontoLatitude() == PontosCardeais.S) {
                latitude = latitude * -1;
            }

            this.ponto.setLatitude(latitude);

            Double longitude = this.ponto.getMinutoLongitude() / 60 + this.ponto.getSegundoLongitude() / 3600;

            if (this.ponto.getGrauLongitude() < 0) {
                longitude = this.ponto.getGrauLongitude() - longitude;
            } else {
                longitude = this.ponto.getGrauLongitude() + longitude;
            }
            if (this.ponto.getPontoLongitude() == PontosCardeais.W) {
                longitude = longitude * -1;
            }

            this.ponto.setLongitude(longitude);
        }

        this.coordenadas.add(this.ponto);

        if (this.conexao) {
            plotar();
        }

        TipoCoordenada tipoCoordenada = this.ponto.getTipoCoordenada();
        this.ponto = new Georreferenciamento();
        this.ponto.setTipoCoordenada(tipoCoordenada);
    }

    public void plotar() {
        LatLng coordenada;
        Polygon poligono = new Polygon();
        this.mapa = new DefaultMapModel();

        for (Georreferenciamento ponto : this.coordenadas) {
            coordenada = new LatLng(ponto.getLatitude(), ponto.getLongitude());
            this.mapa.addOverlay(new Marker(coordenada));
            poligono.getPaths().add(coordenada);
            poligono.setStrokeColor("#FF9900");
            poligono.setStrokeOpacity(0.7);
            poligono.setFillColor("#FF9900");
            poligono.setFillOpacity(0.2);
            this.mapa.addOverlay(poligono);
        }

        centroMapa = this.coordenadas.get(0).getLatitude() + ", " + this.coordenadas.get(0).getLongitude();
    }

    public void editarCoordenada(Georreferenciamento ponto) {
        this.ponto = ponto;
        this.coordenadas.remove(ponto);
    }

    public void removerCoordenada(Georreferenciamento ponto) {
        this.coordenadas.remove(ponto);

        if (this.conexao) {
            plotar();
        }
    }

    public void limparCoordenada() {
        this.ponto = new Georreferenciamento();
    }

    public void adicionarRegistroAnterior() {
        this.registrosAnterioresNaoCadastrados.add(this.registroAnterior);
        this.registroAnterior = new RegistroAnterior();
    }

    public void editarRegistroAnteriorNaoCadastrado(RegistroAnterior registroAnterior) {
        this.registroAnterior = registroAnterior;
        this.registrosAnterioresNaoCadastrados.remove(registroAnterior);
    }

    public void removerRegistroAnteriorNaoCadastrado(RegistroAnterior registroAnterior) {
        this.registrosAnterioresNaoCadastrados.remove(registroAnterior);
    }

    public void salvar() throws IOException {

        // adicionar coordenadas ao objeto
        this.objeto.setGeorreferenciamento(this.coordenadas);

        // adicionar objeto ao imóvel
        this.objeto.getEndereco().setCep(Caracteres.removecaracter(this.objeto.getEndereco().getCep()));
        this.imovel.setObjeto(this.objeto);

        // adicionar registros anteriores caso possua
        if (this.registrosAnterioresNaoCadastrados.size() > 0) {
            this.imovel.setRegistrosAnterioresNaoCadastrado(this.registrosAnterioresNaoCadastrados);
        }

        // adicionar imóveis anteriores caso possua
        if (this.imoveisAnterioresSelecionados.size() > 0) {
            this.imovel.setImoveisAnteriores(this.imoveisAnterioresSelecionados);
        }

        // adicionar anexos
        if (!this.anexos.isEmpty()) {
            this.imovel.setAnexos(this.anexos);
            arquivoUtilitario.gravarAnexos(this.imovel.getAnexos());
        }

        // gerar folhas de pesquisa
        if (!this.imovel.getFolhas().isEmpty()) {
            this.imovel.setFolhasPesquisa(gerarFolhasPesquisa(this.imovel.getFolhas()));
        }

        // novo imóvel
        if (this.imovel.getId() == null) {
            try {
                imovelServico.salvar(this.imovel);

                // protocolo
                if (this.imovel.getProtocolo() != null) {
                    this.registro.setProtocolo(this.imovel.getProtocolo());
                }

                // primeira transferência
                this.transferencia.setImovel(this.imovel);
                this.transferencia.setAdquirente(this.adquirentesSelecionados);
                this.transferencia.setTransmitente(this.transmitentesSelecionados);
                transferenciaServico.salvar(this.transferencia);

                // primeiro registro
                this.registro.setTransferencia(this.transferencia);
                this.registro.setNumero(1);
                this.imovel.getRegistros().add(this.registro);

                imovelServico.atualizar(this.imovel);

                instanciar();

                Mensagem.messagemInfo("Imóvel registrado com sucesso!");

            } catch (EJBException e) {

                Exception causedByException = e.getCausedByException();

                if (!(causedByException instanceof javax.validation.ConstraintViolationException)) {
                    Mensagem.messagemError("O número de matrícula deve ser único!");
                    this.imovel.setId(null);
                }

            }

            // atualizar imóvel
        } else {
            imovelServico.atualizar(this.imovel);

            // this.transferencia.setImovel(this.imovel);
            this.transferencia.setAdquirente(this.adquirentesSelecionados);
            this.transferencia.setTransmitente(this.transmitentesSelecionados);
            transferenciaServico.atualizar(this.transferencia);

            Mensagem.messagemInfo("Registro de Imóvel atualizado com sucesso!");
        }

    }

    public void onStateChange(StateChangeEvent event) {
        int zoomLevel = event.getZoomLevel();
        this.objeto.setZoom(zoomLevel);
    }

    public String gerarFolhasPesquisa(String string) {

        String[] intervalo = string.split("-");

        if (intervalo.length > 1) {
            StringBuilder folhas = new StringBuilder();
            for (int i = Integer.parseInt(intervalo[0].trim()); i <= Integer.parseInt(intervalo[1].trim()); i++) {
                folhas.append(",").append(i);
            }
            folhas.append(",");

            return folhas.toString();
        }

        return string;
    }

    public List<Origem> autocompletarOrigem(String query) {
        return origemServico.autocompletar(query);
    }

    public List<Livro> autocompletarLivro(String query) {
        return livroServico.autocompletar(query);
    }

    public List<Titulo> autocompletarTitulo(String query) {
        return tituloServico.autocompletar(query);
    }

    public List<Cidade> autocompletarCidade(String query) {
        return cidadeServico.autocompletar(query);
    }

    public List<Bairro> autocompletarBairro(String query) {
        return bairroServico.autocompletar(query, this.objeto.getEndereco().getCidade());
    }

    public List<Bairro> autocompletarBairroTransmitente(String query) {
        return bairroServico.autocompletar(query, this.transmitenteCadastrar.getEndereco().getCidade());
    }

    public List<Bairro> autocompletarBairroAdquirente(String query) {
        return bairroServico.autocompletar(query, this.adquirenteCadastrar.getEndereco().getCidade());
    }

    public List<Cartorio> autocompletarCartorio(String query) {
        return cartorioServico.autocompletar(query);
    }

    public String adicionarMascaraCNPJ(String string) {
        return Caracteres.adicionarMascara(string, Caracteres.cnpjMask);
    }

    public String adicionarMascaraCPF(String string) {
        return Caracteres.adicionarMascara(string, Caracteres.cpfMask);
    }

    public String adicionarMascaraCEP(String string) {
        return Caracteres.adicionarMascara(string, Caracteres.cepMask);
    }

    public Imovel getImovel() {
        return imovel;
    }

    public void setImovel(Imovel imovel) {
        this.imovel = imovel;
    }

    public Transferencia getTransferencia() {
        return transferencia;
    }

    public void setTransferencia(Transferencia transferencia) {
        this.transferencia = transferencia;
    }

    public Objeto getObjeto() {
        return objeto;
    }

    public void setObjeto(Objeto objeto) {
        this.objeto = objeto;
    }

    public List<Pessoa> getAdquirentes() {
        return adquirentes;
    }

    public void setAdquirentes(List<Pessoa> adquirentes) {
        this.adquirentes = adquirentes;
    }

    public Pessoa getAdquirentePesquisar() {
        return adquirentePesquisar;
    }

    public void setAdquirentePesquisar(Pessoa adquirentePesquisar) {
        this.adquirentePesquisar = adquirentePesquisar;
    }

    public List<Pessoa> getAdquirentesSelecionados() {
        return adquirentesSelecionados;
    }

    public void setAdquirentesSelecionados(List<Pessoa> adquirentesSelecionados) {
        this.adquirentesSelecionados = adquirentesSelecionados;
    }

    public Pessoa getAdquirenteSelecionado() {
        return adquirenteSelecionado;
    }

    public void setAdquirenteSelecionado(Pessoa adquirenteSelecionado) {
        this.adquirenteSelecionado = adquirenteSelecionado;
    }

    public Pessoa getTransmitentePesquisar() {
        return transmitentePesquisar;
    }

    public void setTransmitentePesquisar(Pessoa transmitentePesquisar) {
        this.transmitentePesquisar = transmitentePesquisar;
    }

    public Pessoa getTransmitenteSelecionado() {
        return transmitenteSelecionado;
    }

    public void setTransmitenteSelecionado(Pessoa transmitenteSelecionado) {
        this.transmitenteSelecionado = transmitenteSelecionado;
    }

    public List<Pessoa> getTransmitentes() {
        return transmitentes;
    }

    public void setTransmitentes(List<Pessoa> transmitentes) {
        this.transmitentes = transmitentes;
    }

    public List<Pessoa> getTransmitentesSelecionados() {
        return transmitentesSelecionados;
    }

    public void setTransmitentesSelecionados(List<Pessoa> transmitentesSelecionados) {
        this.transmitentesSelecionados = transmitentesSelecionados;
    }

    public List<Anexo> getAnexos() {
        return anexos;
    }

    public void setAnexos(List<Anexo> anexos) {
        this.anexos = anexos;
    }

    public AnexoUtilitario getArquivoUtilitario() {
        return arquivoUtilitario;
    }

    public void setArquivoUtilitario(AnexoUtilitario arquivoUtilitario) {
        this.arquivoUtilitario = arquivoUtilitario;
    }

    public List<Imovel> getImoveisAnteriores() {
        return imoveisAnteriores;
    }

    public void setImoveisAnteriores(List<Imovel> imoveisAnteriores) {
        this.imoveisAnteriores = imoveisAnteriores;
    }

    public List<Imovel> getImoveisAnterioresSelecionados() {
        return imoveisAnterioresSelecionados;
    }

    public void setImoveisAnterioresSelecionados(List<Imovel> imoveisAnterioresSelecionados) {
        this.imoveisAnterioresSelecionados = imoveisAnterioresSelecionados;
    }

    public Imovel getImovelAnteriorPesquisar() {
        return imovelAnteriorPesquisar;
    }

    public void setImovelAnteriorPesquisar(Imovel imovelAnteriorPesquisar) {
        this.imovelAnteriorPesquisar = imovelAnteriorPesquisar;
    }

    public Imovel getImovelAnteriorSelecionado() {
        return imovelAnteriorSelecionado;
    }

    public void setImovelAnteriorSelecionado(Imovel imovelAnteriorSelecionado) {
        this.imovelAnteriorSelecionado = imovelAnteriorSelecionado;
    }

    public Pessoa getAdquirenteCadastrar() {
        return adquirenteCadastrar;
    }

    public void setAdquirenteCadastrar(Pessoa adquirenteCadastrar) {
        this.adquirenteCadastrar = adquirenteCadastrar;
    }

    public Pessoa getTransmitenteCadastrar() {
        return transmitenteCadastrar;
    }

    public void setTransmitenteCadastrar(Pessoa transmitenteCadastrar) {
        this.transmitenteCadastrar = transmitenteCadastrar;
    }

    public List<Georreferenciamento> getCoordenadas() {
        return coordenadas;
    }

    public void setCoordenadas(List<Georreferenciamento> coordenadas) {
        this.coordenadas = coordenadas;
    }

    public Georreferenciamento getPonto() {
        return ponto;
    }

    public void setPonto(Georreferenciamento ponto) {
        this.ponto = ponto;
    }

    public MapModel getMapa() {
        return mapa;
    }

    public void setMapa(MapModel mapa) {
        this.mapa = mapa;
    }

    public String getCentroMapa() {
        return centroMapa;
    }

    public void setCentroMapa(String centroMapa) {
        this.centroMapa = centroMapa;
    }

    public RegistroAnterior getRegistroAnterior() {
        return registroAnterior;
    }

    public void setRegistroAnterior(RegistroAnterior registroAnterior) {
        this.registroAnterior = registroAnterior;
    }

    public List<RegistroAnterior> getRegistrosAnterioresNaoCadastrados() {
        return registrosAnterioresNaoCadastrados;
    }

    public void setRegistrosAnterioresNaoCadastrados(List<RegistroAnterior> registrosAnterioresNaoCadastrados) {
        this.registrosAnterioresNaoCadastrados = registrosAnterioresNaoCadastrados;
    }

    public boolean isConexao() {
        return conexao;
    }

    public void setConexao(boolean conexao) {
        this.conexao = conexao;
    }

    public Protocolo getProtocoloPesquisar() {
        return protocoloPesquisar;
    }

    public void setProtocoloPesquisar(Protocolo protocoloPesquisar) {
        this.protocoloPesquisar = protocoloPesquisar;
    }

    public Protocolo getProtocoloSelecionado() {
        return protocoloSelecionado;
    }

    public void setProtocoloSelecionado(Protocolo protocoloSelecionado) {
        this.protocoloSelecionado = protocoloSelecionado;
    }

    public List<Protocolo> getProtocolos() {
        return protocolos;
    }

    public void setProtocolos(List<Protocolo> protocolos) {
        this.protocolos = protocolos;
    }

    public Pessoa getTransmitenteDeletar() {
        return transmitenteDeletar;
    }

    public void setTransmitenteDeletar(Pessoa transmitenteDeletar) {
        this.transmitenteDeletar = transmitenteDeletar;
    }

    public Pessoa getAdquirenteDeletar() {
        return adquirenteDeletar;
    }

    public void setAdquirenteDeletar(Pessoa adquirenteDeletar) {
        this.adquirenteDeletar = adquirenteDeletar;
    }

    public Registro getRegistro() {
        return registro;
    }

    public void setRegistro(Registro registro) {
        this.registro = registro;
    }
}
